/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package DB;

import java.util.Vector;

/**
 *
 * @author Ronaldo Filho
 */
public class DataAccess {

    public DataAccess() {
        
    }
    
    public Vector<Object> access(Vector<Object> fields)
    {
        MySqlQuery query = null;
        MySqlDB dataBase = new MySqlDB();
        dataBase.connect();  //conecta ao banco
        query = new MySqlQuery(dataBase.conn);
        
        Vector<Object> resp = new Vector<Object>();
        
        if(fields.elementAt(0).equals("Login"))
        {
            query.open("SELECT login, senha " +
                       "FROM Administrador " +
                       "WHERE login = \"" + fields.elementAt(1) + "\" " +
                       "AND senha = \"" + fields.elementAt(2) + "\"");                       
            query.first();
            System.out.println(query.fieldbyname("login"));
            System.out.println(query.fieldbyname("senha"));            
            if (query.fieldbyname("login") != null){
                resp.addElement("OK");
            } 
            else {
                resp = null;   
            }          
            
        }
        
        else if(fields.elementAt(0).equals("Search"))
        {
            if(fields.elementAt(1).equals("Jogadores"))
            {
                String consulta = "";
                consulta = "SELECT * FROM Jogador WHERE ";
                if(!fields.elementAt(2).equals("")) 
                    consulta += "nome = '" + fields.elementAt(2) + "' AND ";
                if(!fields.elementAt(3).equals("")) 
                    consulta += "email = '" + fields.elementAt(3) + "' AND ";
                if(!fields.elementAt(4).equals("")) 
                    consulta += "nomeUsuario = '" + fields.elementAt(4) + "' AND ";
                consulta += " 1=1";
                System.out.println(consulta); 
                
                resp.addElement("Answer");
                resp.addElement("Jogadores");
                int cont = 0;
                query.open(consulta);
                query.last();
                System.out.println("recordCount: " + query.recordcount());
                if(query.prev()){
                    do{
                        Vector<Object> auxVector = new Vector<Object>();
                        String nome, email, nomeUsuario;                    
                        nome = query.fieldbyname("nome");   
                        email = query.fieldbyname("email");
                        nomeUsuario = query.fieldbyname("nomeUsuario");
                        auxVector.addElement(nome);
                        auxVector.addElement(email);
                        auxVector.addElement(nomeUsuario);
                        resp.addElement(auxVector);
                        auxVector = null;
                        cont++;
                    }while(query.prev());
                }               
                
                System.out.println("cont: " + cont);
                if(cont < 1){
                    resp.set(0, "Fail");
                    resp.set(1, "Jogador não encontrado");
                }
               
               
            }
            
            else if(fields.elementAt(1).equals("Personagens"))
            {
                Vector<Object> primeiro = new Vector<Object>();
                Vector<Object> segundo = new Vector<Object>();
                
                primeiro.addElement("primeiro");
                primeiro.addElement("Médio");
                primeiro.addElement(80);
                primeiro.addElement(20);
                primeiro.addElement(100);
                primeiro.addElement(1);
                primeiro.addElement('M');
                primeiro.addElement("Comer tua mãe");
                primeiro.addElement("Puta que pariu");
                primeiro.addElement(5);
                primeiro.addElement(2);
                primeiro.addElement(10);
                primeiro.addElement(5);
                primeiro.addElement(2);
                primeiro.addElement(0);
                primeiro.addElement(0);
                primeiro.addElement(0);
                primeiro.addElement(0);
                primeiro.addElement(0);
                primeiro.addElement(0);
                primeiro.addElement(40);
                primeiro.addElement(0);
                primeiro.addElement(0);
                primeiro.addElement(0);
                primeiro.addElement(0);
                
                Vector<Object> feat = new Vector<Object>();
                feat.addElement("Peia Elastica");
                feat.addElement("Incansavel");
                Vector<Object> ent = new Vector<Object>();
                ent.addElement("rolão");
                
                primeiro.addElement(feat);
                primeiro.addElement(ent);
            
                segundo.addElement("segundo");
                segundo.addElement("Médio");
                segundo.addElement(60);
                segundo.addElement(20);
                segundo.addElement(50);
                segundo.addElement(10000);
                segundo.addElement('F');
                segundo.addElement("Dar a bunda");
                segundo.addElement("Casa do Cacete");
                segundo.addElement(2);
                segundo.addElement(8);
                segundo.addElement(10);
                segundo.addElement(0);
                segundo.addElement(0);
                segundo.addElement(0);
                segundo.addElement(0);
                segundo.addElement(0);
                segundo.addElement(0);
                segundo.addElement(0);
                segundo.addElement(0);
                segundo.addElement(400);
                segundo.addElement(0);
                segundo.addElement(0);
                segundo.addElement(0);
                segundo.addElement(0);
                
                Vector<Object> feat2 = new Vector<Object>();
                feat2.addElement("swet pussy");
                feat2.addElement("Insaciavel");
                Vector<Object> ent2 = new Vector<Object>();
                ent2.addElement("vibrador");
                
                segundo.addElement(feat2);
                segundo.addElement(ent2);
            
                resp.addElement("Answer");
                resp.addElement("Personagens");
                resp.addElement(primeiro);
                resp.addElement(segundo);
            }
            
            else if(fields.elementAt(1).equals("Features"))
            {
                String consulta = "";
                consulta = "SELECT * FROM Features WHERE ";
                if(!fields.elementAt(2).equals("")) 
                    consulta += "nome = '" + fields.elementAt(2) + "' AND ";
                if(!fields.elementAt(3).equals("")) 
                    consulta += "custo = " + Integer.parseInt(fields.elementAt(3).toString()) + " AND ";
                if(!fields.elementAt(4).equals("")) 
                    consulta += "descricao = '" + fields.elementAt(4) + "' AND ";
                consulta += " 1=1";
                System.out.println(consulta); 
                
                resp.addElement("Answer");
                resp.addElement("Features");
                int cont = 0;
                query.open(consulta);
                query.last();
                System.out.println("recordCount: " + query.recordcount());
                if(query.prev()){
                    do{
                        Vector<Object> auxVector = new Vector<Object>();
                        String nome, custo, descricao;                    
                        nome = query.fieldbyname("nome");
                        System.out.println(nome);
                        custo = query.fieldbyname("custo");
                        descricao = query.fieldbyname("descricao");
                        auxVector.addElement(nome);
                        auxVector.addElement(Integer.parseInt(custo));
                        auxVector.addElement(descricao);
                        resp.addElement(auxVector);
                        auxVector = null;
                        cont++;
                    }while(query.prev());
                }
                                
                System.out.println("cont: " + cont);
                if(cont < 1){
                    resp.set(0, "Fail");
                    resp.set(1, "Feature não encontrada");
                }
            }
            
            else if(fields.elementAt(1).equals("Terrenos"))
            {
                String consulta = "";
                consulta = "SELECT * FROM Terrenos WHERE ";
                if(!fields.elementAt(2).equals("")) 
                    consulta += "nome = '" + fields.elementAt(2) + "' AND ";
                if(!fields.elementAt(3).equals("")) 
                    consulta += "descricao = '" + fields.elementAt(3) + "' AND ";
                consulta += " 1=1";
                System.out.println(consulta); 
                
                resp.addElement("Answer");
                resp.addElement("Terrenos");
                int cont = 0;
                query.open(consulta);
                query.last();
                System.out.println("recordCount: " + query.recordcount());
                if(query.prev()){
                    do{
                        Vector<Object> auxVector = new Vector<Object>();
                        String nome, descricao;                    
                        nome = query.fieldbyname("nome");   
                        descricao = query.fieldbyname("descricao");                        
                        auxVector.addElement(nome);
                        auxVector.addElement(descricao);                        
                        resp.addElement(auxVector);
                        auxVector = null;
                        cont++;
                    }while(query.prev());
                }               
                
                System.out.println("cont: " + cont);
                if(cont < 1){
                    resp.set(0, "Fail");
                    resp.set(1, "Terreno não encontrado");
                }
            } 
            
            else if(fields.elementAt(1).equals("Equipamentos"))
            {
                Vector<Object> primeiro = new Vector<Object>();
                Vector<Object> segundo = new Vector<Object>();
                
                primeiro.addElement("Rola");
                primeiro.addElement("Colossal");
                primeiro.addElement(60);
                primeiro.addElement(20);
                primeiro.addElement(50);
                primeiro.addElement(10000);
                primeiro.addElement("Comum");
                primeiro.addElement("Simples");
                primeiro.addElement("Não");
                primeiro.addElement(2);
                primeiro.addElement(8);
                primeiro.addElement(10);
                primeiro.addElement(0);
                primeiro.addElement(0);
                primeiro.addElement(0);
                primeiro.addElement("Pica");
                primeiro.addElement("Fuck");
                            
                segundo.addElement("Vibrador");
                segundo.addElement("Enorme");
                segundo.addElement(12);
                segundo.addElement(44);
                segundo.addElement(76);
                segundo.addElement(2000);
                segundo.addElement("Pobre");
                segundo.addElement("Exotico");
                segundo.addElement("Sim");
                segundo.addElement(8);
                segundo.addElement(2);
                segundo.addElement(22);
                segundo.addElement(2);
                segundo.addElement(10);
                segundo.addElement(04);
                segundo.addElement("Xota");
                segundo.addElement("Swety");
            
                resp.addElement("Answer");
                resp.addElement("Equipamentos");
                resp.addElement(primeiro);
                resp.addElement(segundo);
            }
        }
        else if (fields.elementAt(0).equals("Insert")){
            if(fields.elementAt(1).equals("Jogadores")){                
                query.execute("CALL hydoradb.insereJogador(\"" + fields.elementAt(2) + "\", \"" + fields.elementAt(3) + "\", \"" +fields.elementAt(4) + "\")");
                resp.addElement("Alright");
                resp.addElement("Jogador inserido com sucesso!");
            }   
            else if(fields.elementAt(1).equals("Features")){
                System.out.println(fields.elementAt(1).equals("Features"));
                query.execute("CALL hydoradb.insereFeature(\"" + fields.elementAt(2) + "\", \"" + fields.elementAt(3) + "\", \"" +fields.elementAt(4) + "\"" +
                              ",null,null,null,null,null)");
                resp.addElement("Alright");
                resp.addElement("Feature inserida com sucesso!");
            }
            else if(fields.elementAt(1).equals("Terrenos"));{
                System.out.println(fields.elementAt(1).equals("Terrenos"));
                query.execute("CALL hydoradb.insereTerreno(\"" + fields.elementAt(2) + "\", \"" + fields.elementAt(3) +  "\"" + ",null)");
                resp.addElement("Alright");
                resp.addElement("Terreno inserido com sucesso!");
            }
        }
        else if(fields.elementAt(0).equals("Delete")){
            if(fields.elementAt(1).equals("Jogadores")){
                Vector<Object> fieldTemp = (Vector<Object>)fields.clone();
                fieldTemp.set(0, "Search");
                fieldTemp.set(2, "");
                fieldTemp.set(3, "");
                if(this.access(fieldTemp).elementAt(0) == "Answer"){
                    query.execute("DELETE FROM hydoradb.Jogador WHERE nomeUsuario = \"" + fields.elementAt(4) + "\"");
                    resp.addElement("Alright");
                    resp.addElement("Jogador removido com sucesso!");
                }else{
                    resp.addElement("Fail");
                    resp.addElement("Jogador não pode ser removido: " + this.access(fieldTemp).elementAt(1));
                }                
            }
            if(fields.elementAt(1).equals("Features")){
                Vector<Object> fieldTemp = (Vector<Object>)fields.clone();
                fieldTemp.set(0, "Search");
                fieldTemp.set(3, "");
                fieldTemp.set(4, "");
                if(this.access(fieldTemp).elementAt(0) == "Answer"){
                    query.execute("DELETE FROM hydoradb.Features WHERE nome = \"" + fields.elementAt(2) + "\"");
                    resp.addElement("Alright");
                    resp.addElement("Feature removida com sucesso!");
                }else{
                    resp.addElement("Fail");
                    resp.addElement("Feature não pode ser removida: " + this.access(fieldTemp).elementAt(1));
                }
                
            }
            if(fields.elementAt(1).equals("Terrenos")){
                Vector<Object> fieldTemp = (Vector<Object>)fields.clone();
                fieldTemp.set(0, "Search");
                fieldTemp.set(3, "");
                if(this.access(fieldTemp).elementAt(0) == "Answer"){
                    query.execute("DELETE FROM hydoradb.Terrenos WHERE nome = \"" + fields.elementAt(2) + "\"");
                    resp.addElement("Alright");
                    resp.addElement("Terreno removido com sucesso!");
                }else{
                    resp.addElement("Fail");
                    resp.addElement("Terreno não pode ser removido: " + this.access(fieldTemp).elementAt(1));
                }
                
            }
        }
        else if(fields.elementAt(0).equals("Update")){
            if(fields.elementAt(1).equals("Jogadores")){
                Vector<Object> fieldTemp = (Vector<Object>)fields.clone();
                fieldTemp.set(0, "Search");
                fieldTemp.set(2, "");
                fieldTemp.set(3, "");                
                if(this.access(fieldTemp).elementAt(0) == "Answer"){
                    query.execute("UPDATE hydoradb.Jogador SET nome = \"" + fields.elementAt(2) + "\", email = \"" + fields.elementAt(3) + "\" WHERE nomeUsuario = \"" + fields.elementAt(4) + "\"");
                    resp.addElement("Alright");
                    resp.addElement("Jogador atualizado com sucesso!");
                }else{
                    resp.addElement("Fail");
                    resp.addElement("Jogador não pode ser atualizado: " + this.access(fieldTemp).elementAt(1));
                }             
            }
            if(fields.elementAt(1).equals("Features")){
                Vector<Object> fieldTemp = (Vector<Object>)fields.clone();
                fieldTemp.set(0, "Search");
                fieldTemp.set(3, "");
                fieldTemp.set(4, "");
                if(this.access(fieldTemp).elementAt(0) == "Answer"){
                    query.execute("UPDATE hydoradb.Features SET custo = \"" + fields.elementAt(3) + "\", descricao = \"" + fields.elementAt(4) + "\" WHERE nome = \"" + fields.elementAt(2) + "\"");
                    resp.addElement("Alright");
                    resp.addElement("Feature atualizda com sucesso!");
                }else{
                    resp.addElement("Fail");
                    resp.addElement("Feature não pode ser atualizada: " + this.access(fieldTemp).elementAt(1));
                }
            }
            if(fields.elementAt(1).equals("Terrenos")){
                Vector<Object> fieldTemp = (Vector<Object>)fields.clone();
                fieldTemp.set(0, "Search");
                fieldTemp.set(3, "");
                if(this.access(fieldTemp).elementAt(0) == "Answer"){
                    query.execute("UPDATE hydoradb.Terrenos SET descricao = \"" + fields.elementAt(3) + "\" WHERE nome = \"" + fields.elementAt(2) + "\"");
                    resp.addElement("Alright");
                    resp.addElement("Feature atualizda com sucesso!");
                }else{
                    resp.addElement("Fail");
                    resp.addElement("Terreno não pode ser atualizado: " + this.access(fieldTemp).elementAt(1));
                }
                
            }
        }
        dataBase.disconnect();
        return resp;       
       
    }
}
